package com.atguigu.bigdata.scala.chapter06

object Scala11_Object_Abstract_1 {
    def main(args: Array[String]): Unit = {

        // TODO 面向对象编程 - 抽象

        // scala中存在一个特殊的抽象：抽象属性
        // 所谓的抽象属性，其实就是不完整的属性：只有声明，而没有初始化
        // 子类继承抽象类，将抽象属性补全即可。

        // java中没有抽象属性，那scala中抽象属性到底怎么回事？
        // scala声明类的属性，其实在编译时，会编译出一个私有的属性以及两个公共的方法（set,get）
        // scala声明类的抽象属性，其实在编译时，不会编译出一个私有的属性，只会编译出两个公共的抽象方法（set,get）
        // 如果子类补全抽象属性，就等同于声明了属性，同时提供了set，get完整的方法，等同于重写了父类的属性
        new SubUser()

    }

    abstract class User {
        // 抽象属性
        var name : String
    }

    class SubUser extends User {
        var name : String = "zhangsan"
    }
}